Hypertext transfer protocol (HTTP) a widely used networking protocol for exchanging messages between computing systems. The HTTP protocol specifies how messages are formatted and transmitted along with what actions servers, browsers, and other applications using this protocol should take in response to various commands.
Sending HTTP messages to an application, service, or system is a common technique for monitoring the health or status of an application or service which uses HTTP as a protocol to transport workloads. For example, DNS and load balancing services frequently use HTTP messages as a health check of a destination address resolved by DNS or of a server picked to process a load balanced requested. Such a health check message generally helps ensure that a destination target is healthy before sending traffic towards that destination target. To do so, e.g., a DNS server typically sends an HTTP message to a specified port (e.g., port 80) of a target address resolved from a domain name. If an HTTP status code of 200 is received, the server is presumed to be healthy. Typically, however, health checking services assume the workload of the application being monitored rely on HTTP or at least have different availability or capabilities for HTTP. That is, the HTTP health check is typically limited to confirming that a server (e.g., a web server) is listening on a given port (e.g., port 80), without the ability to check or evaluate the functioning of any applications or services on that host. This approach results in both false positive and false negatives. Further, currently available HTTP health check mechanisms are relatively slow, e.g., on an order of minutes before a problem is detected and cloud computing providers typically limit how frequently an HTTP-based health check can be performed, e.g., once a minute. At the same time, using HTTP for health checks is beneficial in that it is very easy to configure and use, since it is plain text communication over a commonly accepted port.
As noted, for some non-HTTP workloads, however, simply responding to an HTTP status or hello message is insufficient to confirm a health status of a server. For example, consider a firewall appliance used to monitor all traffic flows through the appliance in front a private network. Given the importance of a network firewall in many contexts, any outage needs to be detected rapidly, and once detected, it is important that a system administrator react as quickly as possible, e.g., by rerouting to a standby firewall appliance, pulling a appliance from a load balancing pool, changing network routes, etc. However, a simple HTTP status check may be unable to accurately determine a health status of a firewall. That is, that the firewall is responsive to HTTP status message does not confirm that the firewall is properly filtering traffic according to a specific set of rules.
In addition to using HTTP status messages as a health check for applications or appliances, a variety of instance-based applications support simple operations like periodically pinging a server or checking for open ports. However, like the HTTP status message, these approaches are often unable to accurately determine a health status of a server, application or service, beyond confirming that the server, application or service, responds to an ICMP ping message (or similar message). That is, while an application may respond to a ping message, this alone frequently does not provide an indication that the application or services hosted by a server are operating in a healthy manner.